//
//  HomeViewModel.swift
//  新浪微博项目
//
//  Created by 王炯 on 16/7/23.
//  Copyright © 2016年 王炯. All rights reserved.
//

import UIKit

//在viewModel方法中实现从网络获取数据
class HomeViewModel: NSObject
{

    //懒加载一个model数组
    lazy var dataArray:[CellViewModel] = [CellViewModel]()
    
}
//将从网络请求数据的过程全部放在ViewModel类中完成，并返回是否请求数据成功
extension HomeViewModel
{
    //在isSucc闭包内传递一个下拉刷新的数量
    func GetHomeData(isPullUp: Bool,isSuccess:(isSucc: Bool,count:Int)->())
    {
        
        
        //判断当前是上拉刷新还是下拉刷新
        //第一次加载数据的时候，此时dataArray数组为空，故此时dataArray.last?.dataModel?.id=0(默认值),dataArray.first?.dataModel?.id=0(默认值),此时sinceid == 0  maxid == 0  默认服务器返回最新的20条数据
        /*
         - 如果是上拉加载更多数据  需要给服务器maxid=微博ID   sinceid == 0
         - 如果是下拉刷新最新的数据  需要给服务器sinceId=微博ID   maxId == 0
         - 如果sinceid == 0  maxid == 0  默认服务器返回最新的20条数据
         */
        var maxId:Int64 = 0
        var sinceId: Int64 = 0
        // 上拉加载更多
        if isPullUp
        {
            //上拉的时候，取dataArray的最后一条数据的微博ID，把它传送给maxID参数，然后获取到的新数据数组拼接到之前的dataArray数组后面
            maxId = dataArray.last?.dataModel?.id ?? 0
            // 因为服务器返回来重复数据 需要程序员自己处理
            if maxId > 0
            {
                maxId -= 1
            }
        }
        //下拉加载最新(或第一次加载时默认的20条数据)
        else
        {
            //下拉的时候，取dataArray的第一条数据的微博ID，把它传送给sinID参数,然后获取到的数据拼接到之前的dataArray数组前面
            sinceId = dataArray.first?.dataModel?.id ?? 0
        }
        
        
        //在此先判断本地有没有相对应的数据
        //传入参数sinceID:当下拉刷新时使用,maxID:当上拉刷新时使用,
        //回调的返回信息:response:返回有没有字典数据信息
        DataBaseViewModel.CheckCache(sinceId, maxId: maxId) { (response) in
            
            
            //将response转换成字典数组
            guard let statuseArray = response  else
            {
                isSuccess(isSucc: false,count: 0)
                
                return
            }

            //字典转模型
            //值全为字典的数组
            
            //遍历数组并字典转模型
            
            //声明一个模型数组(随时而改变的)
            
            //声明一个模型数组(随时而改变的)
            var tempArray:[CellViewModel] = [CellViewModel]()
            
            for weiboItem in statuseArray
            {
                //字典转模型
                let dataModel = HomeDataModel(dict: weiboItem)
                
                //利用获取到的dataModel初始化CellViewModel对象
                let cellModel = CellViewModel(dataModel: dataModel)
                
                tempArray.append(cellModel)
            }
            
            
            
            
            
            
            //赋值给dataArray数据
            //上拉加载更多数据时，在原有第一次获取数据(数组)的基础后面拼接临时模型数据(随时改变的)
            if isPullUp
            {
                self.dataArray = self.dataArray + tempArray
                //上拉刷新是传递一个假数据count=-1
                //告知VC网络数据请求成功,并传递一个假数据-1(新的数组的大小)
                isSuccess(isSucc: true,count: -1)
            }
                //下拉加载更多时,将重新获取的最新的网络数据(数组信息)拼接到之前获取的旧数据的前面
            else
            {
                self.dataArray = tempArray + self.dataArray
                //告知VC网络数据请求成功,并把新数据的数组大小传递过来
                isSuccess(isSucc: true,count:tempArray.count)
            }
            
        }
        
    }
}